package com.jeesite.modules.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * SFTP定时同步任务，按配置的时间间隔执行文件同步
 */
@Component
@EnableScheduling  // 启用定时任务功能
public class SftpSyncScheduler {
    private static final Logger logger = LoggerFactory.getLogger(SftpSyncScheduler.class);

    @Autowired
    private SshFileSync sshFileSync;  // 注入同步组件

    // 从配置文件读取定时间隔（毫秒），与application.yml中的sftp.sync.sync-interval对应
    @Value("${sftp.sync.sync-interval}")
    private long syncInterval;

    /**
     * 定时执行同步任务
     * fixedRateString：以毫秒为单位的间隔，从上一次任务执行结束后开始计时
     */
    @Scheduled(fixedRateString = "${sftp.sync.sync-interval}")
    public void scheduledSync() {
        // 若间隔为0或负数，不执行定时任务（避免无效循环）
        if (syncInterval <= 0) {
            logger.debug("SFTP定时同步间隔为0，不执行定时任务");
            return;
        }

        logger.info("=== 开始定时SFTP同步（间隔：{}毫秒） ===", syncInterval);
        try {
            // 调用同步方法
            sshFileSync.syncRemoteToLocal();
            logger.info("=== 定时SFTP同步完成 ===");
        } catch (Exception e) {
            logger.error("=== 定时SFTP同步失败 ===", e);
            // 定时任务失败不中断程序，仅记录日志
        }
    }
}
